Circular addressing is typically implemented using three pointers. The first pointer points to the first element of the array, and the second pointer points to the last element of the array. The third pointer points to consecutive elements of the array over the course of a series of operations involving data contained within the array, which operations use the third pointer to determine which elements of the array to access at different times. When an element is accessed, the third pointer is incremented and its value is compared with the value of the second pointer to determine whether the last element of the array has been accessed. If the last element of the array has been accessed, the value of the third pointer is changed such that it points to the first element of the array. Such an algorithm for circular addressing may be substantially incompatible with higher-level programming languages, such as C, in that it may not be easily described using the constructs of such languages.